當系統在處理和儲存客戶資料時,常有一些機敏資料或api key需存放在資料庫,不管是洩漏個資還是api key,都會造成嚴重的資安危機,所以當需要把這些資料存放在資料庫時,可以透過一些AWS加解密的服務對資料進行保護。
KMS是AWS所提供的加解密服務,user可以透過console和cli新增一把key,然後就可以使用這把key對資料作加解密,這把key由AWS保管,無法被直接拿出來使用,使用者也看不到這把key,預設會用Symmetric的方式作加密。下面就介紹要如何透過console和cli新增一把key:
aws kms create-key --region us-east-1
新增key之後,可以看到key會有自己的Key ID,之後要做加解密的話,可以透過Key ID指定要使用哪一把key做加解密。
加密的話可以透過cli和撰寫程式碼做encrypt,如果是透過cli加密的話,資料需先做base64 encode。以c174c888–672a-4265-a532–4fc6cf8340ba這把需要加密的api key為例,先使用base64 encode成:
YzE3NGM4ODgtNjcyYS00MjY1LWE1MzItNGZjNmNmODM0MGJh
接著就可以透過cli進行encrypt。把需要加密的資料指定給plaintext這個參數。response中的CiphertextBlob,就是加密完的資料。
aws kms encrypt --key-id 1435c2bd-a16d-4041-b11b-b8d6ddb3e05e --plaintext YzE3NGM4ODgtNjcyYS00MjY1LWE1MzItNGZjNmNmODM0MGJh --region us-east-1
解密的話一樣可以透過cli或程式進行decrypt。這邊以cli為範例,可以看到response中的Plaintext就是解密過後的資料,取出來之後再用base64 decode,就可以看到原本的資料。
aws kms decrypt --key-id 1435c2bd-a16d-4041-b11b-b8d6ddb3e05e --ciphertext-blob AQICAHhsqBc9TT9Q9wPaCr9G5jaAQVjUx+JtiIMvEL/wwBskcgFs2dAppCy2+3dPZlkLoeCmAAAAgzCBgAYJKoZIhvcNAQcGoHMwcQIBADBsBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDK7A5olnsp51E7J88gIBEIA/0eHnZrN9JD2bAZ28aK2R5kKIqw6fJLlecb/BaRsyjxWBfsj/a8D6nn+1/rku1CZsbyNMaAhvTR02qk/ZEF7U --region us-east-1
參考資料: